﻿using System.Linq;
using StockholmsStad.Web.UI.Class.Interfaces;
using StockholmsStad.Web.UI.UIServiceReference;

namespace StockholmsStad.Web.UI.Class.Controller
{
    /// <summary>
    /// MVC Controller för bokningen
    /// </summary>
    public class OurBookingController
    {
        /// <summary>
        /// Modellen som kontrollern jobbar mot
        /// </summary>
        private readonly IBookingModel _bookingModel;

        private readonly ILoginModel _loginModel;

        private readonly IVarBokning _view;

        /// <summary>
        /// Hämtar eller sätter huruvida en bokning finns eller inte
        /// </summary>
        public bool HasBooking 
        {
            get
            {
                if (_bookingModel.Booking.DateTime != null || _bookingModel.Booking.PreferredDate1.HasValue)
                    return true;
                return false;
            }
        }

        /// <summary>
        /// Skapar Controller och dess vyer och modellen
        /// </summary>
        /// <param name="bookingModel"></param>
        /// <param name="loginModel"></param>
        /// <param name="view"></param>
        public OurBookingController(IBookingModel bookingModel, ILoginModel loginModel, IVarBokning view)
        {
            _view = view;
            _bookingModel = bookingModel;
            _loginModel = loginModel;
        }

        /// <summary>
        /// Ska köras då sidan laddas
        /// </summary>
        public void PageLoad()
        {
            _bookingModel.UpdateBookingFromServer(_loginModel.User);
            Booking booking = _bookingModel.Booking;
            _view.UpdateBooking(booking, _bookingModel.GetLocationName((int) booking.CeremonyType));
            _view.SetHistory(_loginModel.GetHistoryForCurrentUser().ToArray());
        }


        /// <summary>
        /// Utför en avbokning
        /// </summary>
        public void CancelBooking()
        {
            _bookingModel.Booking = Booking.CreateEmptyBooking();
            _bookingModel.CancelBooking(_loginModel.User);
        }
    }
}